/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.conasinf.sofia.controller;

import com.conasinf.sofia.model.dao.Impl.MarcacionesDAOImpl;
import com.conasinf.sofia.model.dao.MarcacionesDAO;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import com.conasinf.sofia.model.TMarcaciones;

/**
 *
 * @author jfgomez
 */
@ManagedBean
@SessionScoped
public class MarcacionesBean implements Serializable {

    //Variable lista que es una lista de tipo TMarcaciones segun el modelo
    //Variable objSelect que es un objeto del tipo TMarcaciones que recibira el objeto seleccionado en la vista
    private List<TMarcaciones> lista;
    private TMarcaciones objSeleccionado = new TMarcaciones();

    private String apellidoNombre = "";
    private Date fechaInicial = new Date();
    private Date fechaFinal = new Date();
    private String titulo = "Marcaciones";

    //Inicializa la lista al instanciar la clase    
    public MarcacionesBean() {
        this.inicializarConsulta();

        this.lista = new ArrayList<TMarcaciones>();
        this.objSeleccionado = new TMarcaciones();
    }

    /**
     * insert() * inserta un nuevo registro en la base de datos crea un nuevo
     * objeto de tipo DAOImpl asigna id en cero para no enviar nulos a la base
     * de datos asigna el usuario que esta trabajando en sesion
     *
     * @author jfgomez
     * @param actionEvent
     */
//    public void insert(ActionEvent actionEvent) {
//        MarcacionesDAO consulta = new MarcacionesDAOImpl();
//        this.objSeleccionado.setId(0);
//        this.objSeleccionado.setUsuario("jfgomez");
//        consulta.save(this.objSeleccionado);
//    }
    /**
     * update() * actualiza el registtro seleccionado en la base de datos crea
     * un nuevo objeto de tipo DAOImpl asigna el usuario que esta trabajando en
     * sesion
     *
     * @author jfgomez
     * @param actionEvent
     */
//    public void update(ActionEvent actionEvent) {
//        MarcacionesDAO consulta = new MarcacionesDAOImpl();
//        this.objSeleccionado.setUsuario("jfgomez");
//        consulta.update(this.objSeleccionado);
//    }
    /**
     * getLista() * entrega una lista de objetos segun la consulta enviada Crea
     * un nuevo objeto de tipo DAOImpl
     *
     * @author jfgomez
     */
    public void inicializarConsulta() {
        this.fechaFinal = new Date();
        this.apellidoNombre = "";

        Calendar fInicial = Calendar.getInstance();
        fInicial.add(Calendar.DATE, -8);

        this.fechaInicial = fInicial.getTime();
    
    }

    public List<TMarcaciones> getLista() {
        Calendar fFinal = Calendar.getInstance();
        fFinal.setTime(this.fechaFinal);
        fFinal.add(Calendar.DATE, 1);

        MarcacionesDAO consulta = new MarcacionesDAOImpl();
        String sql;
        sql = "from TMarcaciones as m where "
                + "(m.TTerceros.primerApellido || ' ' || m.TTerceros.segundoApellido || ' ' || "
                + "m.TTerceros.primerNombre || ' ' || m.TTerceros.segundoNombre "
                + "like '%" + this.apellidoNombre + "%') "
                + "AND m.TTerceros.TEstatusLaboral.usable = 'TRUE' "
                + "AND m.marcacion >= '" + this.fechaInicial + "' "
                + "AND m.marcacion <= '" + fFinal.getTime() + "' "
                + "Order by id Desc";
        return consulta.findAll(sql);
    }

    public void setLista(List<TMarcaciones> lista) {
        this.lista = lista;
    }

    public TMarcaciones getObjSeleccionado() {
        return objSeleccionado;
    }

    public void setObjSeleccionado(TMarcaciones objSeleccionado) {
        this.objSeleccionado = objSeleccionado;
    }

    public String getTitulo() {
        return titulo;
    }

    public String getApellidoNombre() {
        return apellidoNombre;
    }

    public void setApellidoNombre(String apellidoNombre) {
        this.apellidoNombre = apellidoNombre.toUpperCase();
    }

    public Date getFechaInicial() {
        return fechaInicial;
    }

    public void setFechaInicial(Date fechaInicial) {
        this.fechaInicial = fechaInicial;
    }

    public Date getFechaFinal() {
        return fechaFinal;
    }

    public void setFechaFinal(Date fechaFinal) {
        this.fechaFinal = fechaFinal;
    }

}